/**
 * Arduino两轮小车
 * 
 * 本程序可不受限制的用于学习和教学，商业用途请联系作者。
 * 本程序不对用户因使用程序而造成任何形式的损失负责。
 * 
 * site: http://www.xpstem.com/maker/arduino-vehicle
 * author: billy zhang
 */
 
#ifndef ARDUINO_ULTRASONIC_VEHICLE_H_
#define ARDUINO_ULTRASONIC_VEHICLE_H_

#include <Servo.h>
#include "XPVehicle.h"
#include "UltrasonicLidar.h"
#include "TwoWheelDriven.h"

/**
 * 超声波避障小车
 * 
 * 小车根据超声波雷达反馈信息动作。
 * 需超声波传感器、舵机配套使用。
 */
class UltrasonicVehicle : public XPVehicle
{
   public:
     UltrasonicVehicle(const TwoWheelDriven& driven, const LedController& ledCtrl, 
          const UltrasonicLidar& lidar)
      : XPVehicle(driven, ledCtrl), lidar_(lidar)
     {
     }

     void setup() override;
     void drive() override;
     
     ~UltrasonicVehicle();

  private:

    void lookAngle(uint8_t angle);
    int lookAround();
    
    const UltrasonicLidar& lidar_;
    
};

#endif
